unit untGeraBoletos;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls,
  Vcl.ActnList, Vcl.ImgList, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.DBCtrls,
  Vcl.Buttons, Data.DB, Datasnap.DBClient, ACBrBoleto, ACBrBoletoFCQuickFr,
  ACBrBase, ADODB, ClassBase, untDTMPrincipal, ACBrUtil, DateUtils,
  Datasnap.Provider;

type
  TfrmGeraBoletos = class(TForm)
    ac: TActionList;
    img: TImageList;
    acGerar: TAction;
    Panel1: TPanel;
    Panel3: TPanel;
    dbg: TDBGrid;
    acImprimir: TAction;
    acEmail: TAction;
    SpeedButton1: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    dtsBoletos: TDataSource;
    ACBrBoleto: TACBrBoleto;
    acbrPrint: TACBrBoletoFCQuick;
    qryBoletos: TADOQuery;
    qryBoletosCOLABORADOR_ID: TAutoIncField;
    qryBoletosSACADO_NOME: TStringField;
    qryBoletosSACADO_ENDERECO: TStringField;
    qryBoletosSACADO_NUMERO: TStringField;
    qryBoletosSACADO_BAIRRO: TStringField;
    qryBoletosSACADO_CEP: TStringField;
    qryBoletosSACADO_CIDADE: TStringField;
    qryBoletosSACADO_UF: TStringField;
    qryBoletosSACADO_CNPJ_CPF: TStringField;
    qryBoletosBANCO_ID: TAutoIncField;
    qryBoletosBANCO_NRO: TStringField;
    qryBoletosBANCO_DIGITO_NUMERO: TStringField;
    qryBoletosCEDENTE_NOME: TStringField;
    qryBoletosID_REGIONAL: TAutoIncField;
    qryBoletosCEDENTE_CODIGO: TStringField;
    qryBoletosCEDENTE_AGENCIA: TStringField;
    qryBoletosCEDENTE_AGENCIA_DIGITO: TStringField;
    qryBoletosCEDENTE_CONTA: TStringField;
    qryBoletosCEDENTE_CONTA_DIGITO: TStringField;
    qryBoletosCEDENTE_UF: TStringField;
    qryBoletosTITULO_ESPECIE: TStringField;
    qryBoletosTITULO_ACEITE: TStringField;
    qryBoletosTITULO_CARTEIRA: TStringField;
    qryBoletosTITULO_LOCAL_PGTO: TStringField;
    qryBoletosTITULO_MSG: TStringField;
    qryBoletosTITULO_INSTR_1: TStringField;
    qryBoletosTITULO_INSTR_2: TStringField;
    qryBoletosTITULO_PATH_LOGOTIPO: TStringField;
    qryBoletosTITULO_PATH_GERARPDF: TStringField;
    qryBoletosBANCO_NOME: TStringField;
    acSair: TAction;
    SpeedButton5: TSpeedButton;
    cdsBoletos: TClientDataSet;
    dspBoletos: TDataSetProvider;
    qryBoletosChecado: TIntegerField;
    cdsBoletosCOLABORADOR_ID: TAutoIncField;
    cdsBoletosSACADO_NOME: TStringField;
    cdsBoletosSACADO_ENDERECO: TStringField;
    cdsBoletosSACADO_NUMERO: TStringField;
    cdsBoletosSACADO_BAIRRO: TStringField;
    cdsBoletosSACADO_CEP: TStringField;
    cdsBoletosSACADO_CIDADE: TStringField;
    cdsBoletosSACADO_UF: TStringField;
    cdsBoletosSACADO_CNPJ_CPF: TStringField;
    cdsBoletosBANCO_ID: TAutoIncField;
    cdsBoletosBANCO_NRO: TStringField;
    cdsBoletosBANCO_DIGITO_NUMERO: TStringField;
    cdsBoletosCEDENTE_NOME: TStringField;
    cdsBoletosID_REGIONAL: TAutoIncField;
    cdsBoletosCEDENTE_CODIGO: TStringField;
    cdsBoletosCEDENTE_AGENCIA: TStringField;
    cdsBoletosCEDENTE_AGENCIA_DIGITO: TStringField;
    cdsBoletosCEDENTE_CONTA: TStringField;
    cdsBoletosCEDENTE_CONTA_DIGITO: TStringField;
    cdsBoletosCEDENTE_UF: TStringField;
    cdsBoletosTITULO_ESPECIE: TStringField;
    cdsBoletosTITULO_ACEITE: TStringField;
    cdsBoletosTITULO_CARTEIRA: TStringField;
    cdsBoletosTITULO_LOCAL_PGTO: TStringField;
    cdsBoletosTITULO_MSG: TStringField;
    cdsBoletosTITULO_INSTR_1: TStringField;
    cdsBoletosTITULO_INSTR_2: TStringField;
    cdsBoletosTITULO_PATH_LOGOTIPO: TStringField;
    cdsBoletosTITULO_PATH_GERARPDF: TStringField;
    cdsBoletosBANCO_NOME: TStringField;
    cdsBoletosChecado: TIntegerField;
    procedure FormCreate(Sender: TObject);
    procedure acGerarExecute(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure acImprimirExecute(Sender: TObject);
    procedure acSairExecute(Sender: TObject);
    procedure dbgDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dbgDblClick(Sender: TObject);
    procedure dtsBoletosStateChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    FBase: TBase;
    procedure gerarBoletos;
    procedure atualizaBotoes;
  public
    { Public declarations }
  end;

var
  frmGeraBoletos: TfrmGeraBoletos;

implementation

{$R *.dfm}

uses FuncoesGenericas;

{ TfrmGeraBoletos }

procedure TfrmGeraBoletos.acGerarExecute(Sender: TObject);
begin
  if not cdsBoletos.IsEmpty then
    cdsBoletos.EmptyDataSet();
  qryBoletos.Close();
  qryBoletos.Open();
  cdsBoletos.Close();
  cdsBoletos.Open;
end;

procedure TfrmGeraBoletos.acImprimirExecute(Sender: TObject);
begin
  cdsBoletos.DisableControls();
  gerarBoletos();
  ACBrBoleto.Imprimir();
  cdsBoletos.EnableControls();
end;

procedure TfrmGeraBoletos.acSairExecute(Sender: TObject);
begin
  Close();
end;

procedure TfrmGeraBoletos.atualizaBotoes;
begin
  acImprimir.Enabled := not cdsBoletos.IsEmpty;
end;

procedure TfrmGeraBoletos.dbgDblClick(Sender: TObject);
begin
  if cdsBoletos.IsEmpty then
    exit;

  cdsBoletos.Edit;
  if cdsBoletosChecado.AsInteger = 0 then
    cdsBoletosChecado.AsInteger := 1
  else
    cdsBoletosChecado.AsInteger := 0;
  cdsBoletos.Post;
end;

procedure TfrmGeraBoletos.dbgDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Check: Integer;
  R: TRect;
begin
  // DESENHA CHECKBOX NO GRID
  if Column.FieldName = 'Checado' then
  begin
    dbg.Canvas.FillRect(Rect);
    Check := 0;

    if cdsBoletosChecado.AsInteger = 1 then
      Check := DFCS_CHECKED
    else
      Check := 0;

    R := Rect;
    InflateRect(R, -2, -2);
    DrawFrameControl(dbg.Canvas.Handle, R, DFC_BUTTON,
      DFCS_BUTTONCHECK or Check);
  end;
end;

procedure TfrmGeraBoletos.dtsBoletosStateChange(Sender: TObject);
begin
  atualizaBotoes;
end;

procedure TfrmGeraBoletos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmGeraBoletos.FormCreate(Sender: TObject);
begin
  FBase := TBase.Create;
end;

procedure TfrmGeraBoletos.FormShow(Sender: TObject);
begin
  atualizaBotoes();
end;

procedure TfrmGeraBoletos.gerarBoletos;
var
  acbrTitulo: TACBrTitulo;
begin

  cdsBoletos.First();
  ACBrBoleto.ListadeBoletos.Clear();
  while not cdsBoletos.Eof do
  begin
    if cdsBoletosChecado.AsInteger = 1 then
    begin
      with ACBrBoleto do
      begin
        ACBrBoletoFC.DirArqPDF_HTML := cdsBoletosTITULO_PATH_GERARPDF.AsString;
        ACBrBoletoFC.NomeArquivo := cdsBoletosSACADO_CNPJ_CPF.AsString;

        ACBrBoletoFC.DirLogo := cdsBoletosTITULO_PATH_LOGOTIPO.AsString;
        ACBrBoletoFC.Filtro := fiNenhum;
        ACBrBoletoFC.LayOut := lPadraoEntrega;

        Banco.Numero := cdsBoletosBANCO_NRO.AsInteger;
        Banco.Digito := cdsBoletosBANCO_DIGITO_NUMERO.AsInteger;
        Cedente.Nome := cdsBoletosCEDENTE_NOME.AsString;
        Cedente.CodigoCedente := cdsBoletosCEDENTE_CODIGO.AsString;
        Cedente.Agencia := cdsBoletosCEDENTE_AGENCIA.AsString;
        Cedente.AgenciaDigito := cdsBoletosCEDENTE_AGENCIA_DIGITO.AsString;
        Cedente.Conta := cdsBoletosCEDENTE_CONTA.AsString;
        Cedente.ContaDigito := cdsBoletosCEDENTE_CONTA_DIGITO.AsString;
        Cedente.UF := cdsBoletosCEDENTE_UF.AsString;
      end;
      acbrTitulo := ACBrBoleto.CriarTituloNaLista();
      with acbrTitulo do
      begin
        Vencimento := EndOfTheYear(Date);
        DataDocumento := Date;
        NumeroDocumento := StrZero(cdsBoletosCOLABORADOR_ID.AsString,8);
        EspecieDoc := cdsBoletosTITULO_ESPECIE.AsString;
        Aceite := atNao;
        DataProcessamento := Date;
        NossoNumero := StrZero(NumeroDocumento, 8);
        Carteira := cdsBoletosTITULO_CARTEIRA.AsString;
        ValorDocumento := 0;
        Sacado.NomeSacado := cdsBoletosSACADO_NOME.AsString;
        Sacado.CNPJCPF := FormatarCPFCNPJ(cdsBoletosSACADO_CNPJ_CPF.AsString);
        Sacado.Logradouro := cdsBoletosSACADO_ENDERECO.AsString;
        Sacado.Numero := cdsBoletosSACADO_NUMERO.AsString;
        Sacado.Bairro := cdsBoletosSACADO_BAIRRO.AsString;
        Sacado.Cidade := cdsBoletosSACADO_CIDADE.AsString;
        Sacado.UF := cdsBoletosSACADO_UF.AsString;
        Sacado.CEP := cdsBoletosSACADO_CEP.AsString;
        ValorAbatimento := 0;
        LocalPagamento := cdsBoletosTITULO_LOCAL_PGTO.AsString;
        ValorMoraJuros := 0;
        ValorDesconto := 0;
        ValorAbatimento := 0;
        DataMoraJuros := 0;
        DataDesconto := 0;
        DataAbatimento := 0;
        PercentualMulta := 0;
        Mensagem.Text := cdsBoletosTITULO_MSG.AsString;
        Instrucao1 := padL(trim(cdsBoletosTITULO_INSTR_1.AsString), 100, '0');
        Instrucao2 := padL(trim(cdsBoletosTITULO_INSTR_2.AsString), 100, '0');
        Parcela := 1;
      end;
    end; // end if
    cdsBoletos.Next();
  end; // end while
end;


end.
